class Solution {
        int m, n;
            int dx[4] = {0, 0, 1, -1};
                int dy[4] = {1, -1, 0, 0};
    public:
                    void bfs(vector<vector<bool>>& vis, vector<vector<char>>& board, int i, int j, int able)
                    {
                                queue<pair<int, int>> q;
                                        q.push({i, j});
                                                vis[i][j] = true;

                                                        while (q.size())
                                                        {
                                                                        auto [a, b] = q.front();
                                                                                    q.pop();
                                                                                                if (able) // 只有区域不处在边缘时才更改
                                                                                                                    board[a][b] = 'X';
                                                                                                            for (int k = 0; k < 4; k++)
                                                                                                            {
                                                                                                                                int x = a + dx[k], y = b + dy[k];
                                                                                                                                                if (x >= 0 && x < m && y >= 0 && y < n && board[x][y] == 'O' && !vis[x][y])
                                                                                                                                                {
                                                                                                                                                                        q.push({x, y});
                                                                                                                                                                                            vis[x][y] = true;
                                                                                                                                                                                                            
                                                                                                                                                }
                                                                                                                                                            
                                                                                                            }
                                                                                                                    
                                                        }
                                                            
                    }

                        void solve(vector<vector<char>>& board)
                        {
                                    m = board.size(), n = board[0].size();
                                            vector<vector<bool>> vis(m, vector<bool>(n, false));
                                                    // 先处理边缘，将边缘的区域设置为true
                                                    //         for (int i = 0; i < m; i++)
                                                    //                 {
                                                    //                             if (board[i][0] == 'O' && !vis[i][0])
                                                    //                                             bfs(vis, board, i, 0, false);
                                                    //                                                         if (board[i][n - 1] == 'O' && !vis[i][n - 1])
                                                    //                                                                         bfs(vis, board, i, n - 1, false);
                                                    //                                                                                 }
                                                    //                                                                                         for (int j = 0; j < n; j++)
                                                    //                                                                                                 {
                                                    //                                                                                                             if (board[0][j] == 'O' && !vis[0][j])
                                                    //                                                                                                                             bfs(vis, board, 0, j, false);
                                                    //                                                                                                                                         if (board[m - 1][j] == 'O' && !vis[m - 1][j])
                                                    //                                                                                                                                                         bfs(vis, board, m - 1, j, false);
                                                    //                                                                                                                                                                 }
                                                    //                                                                                                                                                                         for (int i = 1; i < m - 1; i++)
                                                    //                                                                                                                                                                                 {
                                                    //                                                                                                                                                                                             for (int j = 1; j < n - 1; j++)
                                                    //                                                                                                                                                                                                         {
                                                    //                                                                                                                                                                                                                         if (board[i][j] == 'O' && !vis[i][j])
                                                    //                                                                                                                                                                                                                                             bfs(vis, board, i, j, true);
                                                    //                                                                                                                                                                                                                                                         }
                                                    //                                                                                                                                                                                                                                                                 }
                                                    //                                                                                                                                                                                                                                                                     }
                                                    //                                                                                                                                                                                                                                                                     };
                                                    //                                                                                                                                                                                                         }
                                                    //                                                                                                                                                                                 }
                                                    //                                                                                                 }
                                                    //                 }
                        }
}
